package SeparateAnalysis;

/**
 * Created by IntelliJ IDEA.
 * User: Mike
 * Date: 11/11/11
 * Time: 12:36 PM
 * To change this template use File | Settings | File Templates.
 */

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.VerticalAlignment;
import org.jfree.util.Log;
import org.jfree.util.PrintStreamLogTarget;

import java.awt.*;

//import org.jfree.ui.Spacer;

/**
 * A simple demonstration application showing how to create an area cBar using data from a
 * {@link org.jfree.data.category.CategoryDataset}.
 */
public class ChartArea extends ApplicationFrame {

    private JFreeChart chart;
    double[][] data;
    boolean defaultData = true;


    public JFreeChart getChart() {
        return chart;
    }

    public void setData(double[][] dataTemp) {
        this.data = dataTemp;
        defaultData = false;
        System.out.println("set data");
    }

    public void updateChart(double[][] dataTemp) {
        if (dataTemp.length > 1) {
            this.data = dataTemp;
            defaultData = false;
            System.out.println("update cBar");
            String title = "fuck off";
//            ChartArea(title);
            final CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                    "Series ", "Type ", data
            );
            // create the cBar...
            chart = createChart(dataset);
        }

    }

    public ChartArea(final String title) {

        super(title);


//        System.out.println("here2");
        if (defaultData) {
            this.data = new double[][]{        // create a dataset...
                    {1.0, 4.0, 3.0, 5.0, 5.0, 7.0, 7.0, 8.0},
                    {5.0, 7.0, 6.0, 8.0, 4.0, 4.0, 2.0, 1.0},
                    {4.0, 3.0, 2.0, 3.0, 6.0, 3.0, 4.0, 3.0}
            };
        }
        final CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
                "Series ", "Type ", data
        );
        // create the cBar...
        this.chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(500, 270));
        chartPanel.setEnforceFileExtensions(false);
        setContentPane(chartPanel);
    }

    private TextTitle setSubtitle() {
        final TextTitle subtitle = new TextTitle(" subtitle here");
        subtitle.setFont(new Font("SansSerif", Font.PLAIN, 12));
        subtitle.setPosition(RectangleEdge.TOP);
        subtitle.setVerticalAlignment(VerticalAlignment.BOTTOM);
        return subtitle;
    }

    private JFreeChart createChart(final CategoryDataset dataset) {

        final JFreeChart chart = ChartFactory.createAreaChart(
                "Area Chart",             // cBar title
                "Category",               // domain axis label
                "Value",                  // range axis label
                dataset,                  // data
                PlotOrientation.VERTICAL, // orientation
                true,                     // include legend
                true,                     // tooltips
                false                     // urls
        );

        chart.setBackgroundPaint(Color.white);
//        cBar.addSubtitle(setSubtitle());
        final CategoryPlot plot = chart.getCategoryPlot();
        plot.setForegroundAlpha(0.5f);
        //      plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 5.0, 5.0, 5.0, 5.0));
        plot.setBackgroundPaint(Color.white);
        plot.setDomainGridlinesVisible(true);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.white);

        final CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
        domainAxis.setLowerMargin(0.0);
        domainAxis.setUpperMargin(0.0);
        domainAxis.addCategoryLabelToolTip("Type 1", "The first type.");
        domainAxis.addCategoryLabelToolTip("Type 2", "The second type.");
        domainAxis.addCategoryLabelToolTip("Type 3", "The third type.");

        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setLabelAngle(0 * Math.PI / 2.0);
        // OPTIONAL CUSTOMISATION COMPLETED.

        return chart;

    }


    public static void main(final String[] args) {

        Log.getInstance().addTarget(new PrintStreamLogTarget());
        final ChartArea demo = new ChartArea("Area Chart Demo");
        demo.pack();
//        RefineryUtilities.centerFrameOnScreen(demo);
//        demo.setVisible(true);

    }

}
         